/* 
1 发送请求获取数据
2 点击轮播图放大图片
  1）点击轮播图点击事件
  2）使用小程序的api previewImage
3 点击加入购物车
  1）先绑定点击事件
  2）获取缓存中的购物车数据 数组格式
  3）判断当前商品是否已经存在于购物车中
  4）已经存在 修改商品数据 购物车数量++  重新把购物车数据填充至缓存中
  5）不存在购物车数组中，直接给购物车数组添加新元素，但新元素得有购买数量属性 num
    重新把购物车数据填充至缓存中
  6）弹出用户提示
4 商品收藏
 1）页面onShow时，要先加载缓存中的商品收藏数据
 2）判断当前商品是否被收藏
  1 是 改变页面图标
  2 不是。。
 3）点击商品收藏按钮
  1判断该商品是否存在于缓存数组中
  2 已经存在，把该商品删除掉
  3 没有存在，把商品添加到收藏数组中，也存入缓存中
*/
import {
    request
} from "../../request/index.js"
import regeneratorRuntime from '../../lib/runtime/runtime';

Page({

    /**
     * 页面的初始数据
     */
    data: {
        goodsObj: {},
        current_index: 0,
        // 商品是否被收藏过
        isCollect: false,
        num: 1,
        totalPrice: 0,
        isActive: false,
        readyToBuy: false
    },

    // 商品对象
    GoodsInfo: {},

    /**
     * 生命周期函数--监听页面加载
     */
    onShow: function () {
        // 先拿到当前页面栈 (发请求使用),利用此方法在onshow内使用options
        let pages = getCurrentPages();
        let currentPage = pages[pages.length - 1];
        let options = currentPage.options;
        const {
            goods_id
        } = options;
        this.getGoodsDetail(goods_id);
    },

    async getGoodsDetail(goods_id) {
        const goodsObj = await request({
            url: "public/goods/detail?pro_Id=" + goods_id
        });
        this.GoodsInfo = goodsObj;
        // 将goodsObj存入缓存中
        wx.setStorageSync("goodsObj", goodsObj);
        // 获取数量并计算价格
        let num = this.data.num;
        let totalPrice = 0;
        totalPrice += num * goodsObj.skus[this.data.current_index].SKU_CrtPrice;
        // 1 获取缓存中的商品收藏数组
        let collect = wx.getStorageSync(("collect")) || [];
        // 2 判断当前商品是否被收藏
        let isCollect = collect.some(v => v.goods_id === this.GoodsInfo.goods_id);

        this.setData({
            goodsObj,
            isCollect,
            num,
            totalPrice,
        })
    },

    // 点击轮播图放大预览
    handlePreviewImage(e) {
        // 1 直接构造要预览的图片数组
        const urls = this.GoodsInfo.pics;
        //2 点击事件触发之后，需要接受传递过来的图片的url
        const current = e.currentTarget.dataset.url;
        wx.previewImage({
            current,
            urls
        });
    },

    // // 点击加入收藏
    // handleCartAdd(){
    //   // 1 获取缓存中的购物车数组
    //   let cart=wx.getStorageSync("cart")||[];
    //   // 2 判断商品是否在购物车数组中
    //   // findIndex() 方法返回传入一个测试条件（函数）符合条件的数组第一个元素位置。
    //   let index=cart.findIndex(v=>v.goods_id===this.GoodsInfo.goods_id)
    //   if(index===-1){
    //     // 不存在
    //     this.GoodsInfo.num=1;
    //     this.GoodsInfo.checked=true;
    //     cart.push(this.GoodsInfo);
    //   }
    //   else{
    //     // 已经存在购物车数据,执行商品数量++
    //     cart[index].num++;

    //   }
    //   //3  把购物车重新添加到缓存中
    //   wx.setStorageSync("cart",cart);
    //   //4  弹窗提示
    //   wx.showToast({
    //     title: '加入成功',
    //     icon: 'success',
    //     // true 可以防止用户手抖疯狂点击
    //     // 即mask:true可以使用户点击一次之后1.5秒之后才能再次点击生效
    //     mask: true
    //   })
    // },


    // 点击 like 图标
    async handleCollect() {
        let isCollect = false;
        // 1 获取缓存中的商品收藏数组
        let collect = wx.getStorageSync("collect") || [];
        // 2 判断商品是否被收藏
        let index = collect.findIndex(v => v.goods_id === this.GoodsInfo.goods_id);
        // 3 当index不等于-1时，表示已经收藏过
        if (index !== -1) {
            // 表示已经收藏过，在数组中删除该商品
            let res = await request({
                url: 'my/collects/upload',
                data: {
                    type: '1',
                    pro_Id: this.GoodsInfo.goods_id
                },
                method: 'POST',
                header: {
                    'content-type': 'application/x-www-form-urlencoded'
                },
            });
            console.log(res);
            // 弹窗提示
            wx.showToast({
                title: '取消成功',
                icon: 'success',
                mask: true
            });
            collect.splice(index, 1);
            isCollect = false;
        } else {
            let res = await request({
                url: 'my/collects/upload',
                data: {
                    type: '0',
                    pro_Id: this.GoodsInfo.goods_id
                },
                method: 'POST',
                header: {
                    'content-type': 'application/x-www-form-urlencoded'
                },
            });
            console.log(res);
            collect.push(this.GoodsInfo);
            isCollect = true;
            wx.showToast({
                title: '加入收藏成功',
                icon: 'success',
                mask: true
            });
        }
        // 4 把数组存入到缓存中
        wx.setStorageSync("collect", collect);
        // 5 修改data中的属性 isCollect
        this.setData({
            isCollect
        })


    },

    // 商品数量的编辑功能
    handleItemNumEdit(e) {
        // 1 获取传递过来的参数
        const {
            operation
        } = e.currentTarget.dataset;
        // 2 获取num
        let num = this.data.num;
        // 3 判断加减
        if (num === 1 && operation === -1) {
            // 弹窗提示  主要就是这里的修改
            wx.showModal({
                title: '提示',
                content: '不能再删除啦！',
                success: (res) => {
                    return;
                }
            });
        } else {
            // // 4 开始进行修改数量
            num += operation;
            // 5 重新设置总金额
            let totalPrice = 0;
            totalPrice = num * this.GoodsInfo.skus[this.data.current_index].SKU_CrtPrice;
            this.setData({
                num,
                totalPrice
            })
        }
    },

    // 更新当前选择的sku索引
    handleCurrentIndex(e) {
        const {
            index
        } = e.detail;
        this.setData({
            current_index: index
        })
        const {
            num,
            current_index,
            goodsObj
        } = this.data;
        const totalPrice = num * goodsObj.skus[current_index].SKU_CrtPrice;
        this.setData({
            totalPrice
        })
    },

    // 打开、关闭选择规格面板
    handleSwitchSKUPanel() {
        this.setData({
            isActive: !this.data.isActive
        })
    },

    // 发起购买
    handleBuy() {
        if (this.data.isActive) {
            const {
                num,
                totalPrice,
                goodsObj,
                current_index,
            } = this.data;
            const url = "../pay/pay?num=" + num + "&totalPrice=" + totalPrice + "&goods_id=" + goodsObj.goods_id +"&current_index="+current_index;
            wx.navigateTo({
                url
            });
        } else
            this.handleSwitchSKUPanel();
    }

})